from . import db  # 从 models/__init__.py 导入 db

#角色
#用户表
#资源表
#角色资源表

tb_role_resouce = db.Table('tb_role_resource',
                             db.Column('role_id', db.Integer, db.ForeignKey('roles.id')),
                             db.Column('resouce_id', db.Integer, db.ForeignKey('resouce.id'))
  
                           )
class Resouce(db.Model):
    # 定义表名
    __tablename__ = 'resouce'
    # 定义列对象
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    # 父级资源ID，自关联字段，可为None（表示顶级资源）
    pid = db.Column(db.Integer, db.ForeignKey('resouce.id'), nullable=True)
    
    # 定义自关联关系
    # 父级资源引用（一个资源只能有一个父级）
    parent = db.relationship(
        'Resouce', 
        backref=db.backref('children', lazy=True),  # 反向引用，获取所有子资源
        remote_side=[id],  # 自关联时指定关联的是当前表的id字段
        lazy='select',  # 延迟加载，需要时才查询
        uselist=False  # 一个资源只能有一个父级，不使用列表
    )

class Role(db.Model):
    # 定义表名
    __tablename__ = 'roles'
    # 定义列对象
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    us = db.relationship('User', backref='role')
    
    resource = db.relationship('Resouce', secondary=tb_role_resouce,
                              backref='role',
                              lazy='dynamic')

    #repr()方法显示一个可读字符串

    
    

# class ShopOrders(db.Model):
#     # 定义表名
#     __tablename__ = 'shop_orders'
#     # 定义列对象
#     id = db.Column(db.Integer, primary_key=True)
#     name = db.Column(db.String(64), unique=True)
#     users =db.Column(db.Integer, db.ForeignKey('users.id'))
     

class User(db.Model):
    __tablename__ = "users"  # 表名
    
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), unique=True, nullable=False)  # 用户名（唯一）
    password = db.Column(db.String(128), nullable=False)              # 密码
    email = db.Column(db.String(100), unique=True, nullable=False)    # 邮箱（唯一）
    create_time = db.Column(db.DateTime, default=db.func.now())       # 创建时间（默认当前时间）
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
  
    
    
    

    
    

    
